Automated process control systems include a comprehensive set of control algorithms, or software-definable process control routines, to control and monitor various processes within, for instance, a manufacturing facility. The software for such control systems is frequently implemented using programming languages, such as "C++," that embody an object-oriented design methodology that employs a "Kernel" subsystem which manages execution of and interaction between various "application objects;" an application object is a software construct that may contain an algorithm used, for example, to control the operation of an actuator in a processing facility.
Within object-oriented software systems, the nature of the linking mechanism which joins application objects to the Kernel, and to each other, is very important; a linking mechanism may be either "static" or "dynamic." Generally, if a static linking mechanism is employed, software code modules are bound to each other rigidly and early in the software system development life-cycle. In addition, with a static linking mechanism, application objects typically cannot be changed or added independently of the Kernel or of each other; for example, if the Kernel changes, the application objects are re-released when the Kernel is released and, if any of the application objects are changed, the Kernel is re-released when the application objects are released.
In contrast to static linking mechanisms, if a dynamic linking mechanism is employed, software code modules are typically bound to each other later on in the software development life-cycle, e.g., at the time when an application configuration is loaded. In addition, using a dynamic linking mechanism, application objects can be changed or added independently of changes to the Kernel or other application objects; e.g., changes to the Kernel are not accompanied by releases of already existing application objects and should not force such a release and changes to application objects do not force release of the Kernel.
Within programming and execution environments, such as C++, both static and dynamic linking mechanisms are typically supported. The support for both types of linking mechanisms, however, is generally limited within a consistent tool set offered by a single vendor, which requires that the Kernel and the application objects be compiled and linked using a single vendor's tool, regardless of whether the linking mechanisms employed are static, dynamic, or some combination of both types. Examples of static and dynamic linking mechanisms of application objects may be found in well known technologies, such as the "Component Object Model" by Microsoft.RTM. and the "Common Object Request Broker Architecture" by Object Management Group; it is believed, however, that the foregoing software technologies do not provide for seamless calling of either static or dynamic linked application objects across heterogeneous tool sets.
When process controllers are implemented under an object-oriented software paradigm using a programming language such as C++, the software design and development has additional requirements. For example, the software for a process controller must be maintained and possibly even enhanced over an extended period of time. Additionally, modifications to the software might have to be accomplished using personnel working independently and geographically separate from each other. Furthermore, the lifetime of the product may exceed the lifetime of the software development tools used, necessitating the introduction of a new software tool set without invalidating existing application object software.
Accordingly, what is needed in the art is an improved object-oriented controller design that supports both static and dynamic linking mechanisms; more particularly, what is needed in the art are means to support dynamic linking of application objects that are robust against changes in software tools used to maintain and modify controller software.